@echo off
chcp 65001 >nul
title 语音情感识别系统停止脚本

echo ==========================================
echo 🛑 语音情感识别系统停止脚本 (Windows版)
echo ==========================================

set BACKEND_PORT=8000
set FRONTEND_PORT=3000

echo 🔍 正在查找并停止相关服务...

REM 停止FastAPI后端服务
echo 🛑 停止后端API服务...
taskkill /f /im python.exe /fi "WINDOWTITLE eq Backend-API*" >nul 2>&1
if errorlevel 1 (
    echo ⚠️  未找到运行中的后端服务窗口
) else (
    echo ✅ 后端服务已停止
)

REM 额外尝试通过端口停止后端
for /f "tokens=5" %%i in ('netstat -ano ^| findstr ":8000 "') do (
    echo 🔍 发现占用8000端口的进程: %%i
    taskkill /f /pid %%i >nul 2>&1
    if not errorlevel 1 echo ✅ 强制停止进程 %%i
)

REM 停止Next.js前端服务
echo 🛑 停止前端Web服务...
taskkill /f /im node.exe /fi "WINDOWTITLE eq Frontend-WebUI*" >nul 2>&1
if errorlevel 1 (
    echo ⚠️  未找到运行中的前端服务窗口
) else (
    echo ✅ 前端服务已停止
)

REM 额外尝试通过端口停止前端
for /f "tokens=5" %%i in ('netstat -ano ^| findstr ":3000 "') do (
    echo 🔍 发现占用3000端口的进程: %%i
    taskkill /f /pid %%i >nul 2>&1
    if not errorlevel 1 echo ✅ 强制停止进程 %%i
)

REM 清理可能遗留的Python进程
echo 🧹 清理相关Python进程...
tasklist /fi "imagename eq python.exe" /fi "cputime gt 00:00:00" /fo csv | findstr "python.exe" >nul
if not errorlevel 1 (
    echo 🔍 发现Python进程，尝试清理...
    for /f "tokens=2 delims=," %%i in ('tasklist /fi "imagename eq python.exe" /fo csv ^| findstr "python.exe"') do (
        set pid=%%i
        set pid=!pid:"=!
        tasklist /fi "pid eq !pid!" | findstr "run.py\|main.py\|uvicorn" >nul
        if not errorlevel 1 (
            echo 🛑 停止Python服务进程: !pid!
            taskkill /f /pid !pid! >nul 2>&1
        )
    )
)

REM 清理可能遗留的Node.js进程
echo 🧹 清理相关Node.js进程...
tasklist /fi "imagename eq node.exe" | findstr "node.exe" >nul
if not errorlevel 1 (
    echo 🔍 发现Node.js进程，尝试清理...
    for /f "tokens=2" %%i in ('tasklist /fi "imagename eq node.exe" /fo csv ^| findstr "node.exe"') do (
        set pid=%%i
        set pid=!pid:"=!
        tasklist /fi "pid eq !pid!" | findstr "next\|npm" >nul
        if not errorlevel 1 (
            echo 🛑 停止Node.js服务进程: !pid!
            taskkill /f /pid !pid! >nul 2>&1
        )
    )
)

echo.
echo 🔍 最终检查端口占用情况...

REM 检查后端端口
netstat -ano | findstr ":%BACKEND_PORT% " >nul
if errorlevel 1 (
    echo ✅ 后端端口 %BACKEND_PORT% 已释放
) else (
    echo ⚠️  后端端口 %BACKEND_PORT% 仍被占用:
    netstat -ano | findstr ":%BACKEND_PORT% "
    echo 💡 如需强制清理，请运行: check-ports.bat clean
)

REM 检查前端端口
netstat -ano | findstr ":%FRONTEND_PORT% " >nul
if errorlevel 1 (
    echo ✅ 前端端口 %FRONTEND_PORT% 已释放
) else (
    echo ⚠️  前端端口 %FRONTEND_PORT% 仍被占用:
    netstat -ano | findstr ":%FRONTEND_PORT% "
    echo 💡 如需强制清理，请运行: check-ports.bat clean
)

echo.
echo ==========================================
echo ✅ 系统停止完成！
echo ==========================================
echo 🔍 如需确认服务已完全停止，可以检查：
echo   - 后端: 浏览器访问 http://localhost:8000 (应该无法访问)
echo   - 前端: 浏览器访问 http://localhost:3000 (应该无法访问)
echo.
echo 📋 如需重新启动:
echo   - 双击 start.bat 或在命令行运行 start.bat
echo ==========================================

echo.
echo 💡 按任意键退出...
pause >nul 